Web2Py এর মাধ্যমে API Endpoints তৈরি করা একটি সাধারণ প্রক্রিয়া, যা ওয়েব অ্যাপ্লিকেশন থেকে বিভিন্ন ধরনের ডেটা এক্সপোজ করার জন্য ব্যবহৃত হয়। API Endpoints হল এমন URL যেখানে ওয়েব অ্যাপ্লিকেশনটি HTTP রিকোয়েস্ট গ্রহণ করে এবং সাড়া দেয়, সাধারণত JSON ফরম্যাটে ডেটা প্রদান করা হয়। Web2Py এ API তৈরি করার জন্য সাধারণত RESTful API বা JSON-based API ব্যবহার করা হয়।
এখানে Web2Py ব্যবহার করে API Endpoint তৈরি করার প্রক্রিয়া বিস্তারিতভাবে দেওয়া হলো।
১. API Endpoint তৈরি করার প্রাথমিক ধারণা
Web2Py তে API Endpoint তৈরি করার জন্য আপনাকে সাধারণত কন্ট্রোলার (Controller) এবং অ্যাকশন (Action) ফাংশন ব্যবহার করতে হয়। এই ফাংশনগুলো HTTP রিকোয়েস্টের উত্তর হিসেবে JSON ডেটা রিটার্ন করে।
API গুলি সাধারণত GET, POST, PUT, DELETE HTTP মেথড ব্যবহার করে। Web2Py তে JSON ডেটা রিটার্ন করার জন্য response.json() ফাংশন ব্যবহার করা হয়।
২. API Endpoint তৈরি করার উদাহরণ
ধরা যাক, আপনি একটি সিম্পল API তৈরি করতে চান যা বইয়ের তালিকা প্রদান করবে। এখানে একটি API Endpoint তৈরি করা হবে যা HTTP GET রিকোয়েস্ট গ্রহণ করে এবং JSON ফরম্যাটে বইয়ের তালিকা রিটার্ন করবে।
Step 1: Controller তৈরি করা
প্রথমে, controllers ফোল্ডারে একটি কন্ট্রোলার ফাইল তৈরি করুন (যেমন api.py)।
# controllers/api.py
def get_books():
# ডাটাবেস থেকে বইয়ের তথ্য নেওয়া
books = db().select(db.book.ALL)
# JSON ফরম্যাটে ডেটা রিটার্ন করা
return response.json(dict(books=[book.as_dict() for book in books]))
এখানে, db().select(db.book.ALL) দিয়ে ডাটাবেস থেকে সব বইয়ের তথ্য নিয়ে আসা হয়েছে। response.json() ফাংশনের মাধ্যমে সেই ডেটা JSON ফরম্যাটে রিটার্ন করা হয়েছে।
Step 2: URL রাউটিং
Web2Py তে কন্ট্রোলারের অ্যাকশনগুলোর জন্য URL রাউটিং স্বয়ংক্রিয়ভাবে কাজ করে। উপরের get_books অ্যাকশনটি আপনি নিম্নলিখিত URL তে কল করতে পারবেন:
http://127.0.0.1:8000/your_app_name/api/get_books
এটি GET HTTP রিকোয়েস্ট গ্রহণ করবে এবং JSON ফরম্যাটে বইয়ের তালিকা রিটার্ন করবে।
Step 3: মডেল ফাইল তৈরি করা (যদি প্রয়োজন হয়)
এছাড়া, ডাটাবেস টেবিল ডিফাইন করতে মডেল ফাইল ব্যবহার করা যেতে পারে, যেমন:
# models/db.py
db = DAL('sqlite://storage.sqlite')
# বইয়ের টেবিল ডিফাইন করা
db.define_table('book',
Field('title', 'string'),
Field('author', 'string'),
Field('year', 'integer')
)
এখানে book নামের একটি টেবিল ডিফাইন করা হয়েছে, যার মধ্যে বইয়ের শিরোনাম, লেখক এবং প্রকাশের বছর রয়েছে।
৩. POST রিকোয়েস্টের মাধ্যমে ডেটা তৈরি করা
আপনি যদি নতুন বই যোগ করার জন্য একটি API Endpoint তৈরি করতে চান, যেখানে ইউজার একটি POST রিকোয়েস্ট পাঠাবে, তাহলে নিম্নলিখিত পদ্ধতি অনুসরণ করতে পারেন।
Step 1: POST API Endpoint তৈরি করা
# controllers/api.py
def add_book():
# POST রিকোয়েস্ট থেকে ডেটা গ্রহণ করা
title = request.vars.title
author = request.vars.author
year = request.vars.year
# ডেটাবেসে নতুন বই যুক্ত করা
db.book.insert(title=title, author=author, year=year)
# JSON রেসপন্স প্রদান করা
return response.json(dict(status="success", message="Book added successfully"))
এখানে:
request.varsদিয়ে POST রিকোয়েস্ট থেকে ইউজার ইনপুট নেওয়া হয়েছে।db.book.insert()দিয়ে ডেটাবেসে নতুন বই সন্নিবেশিত করা হয়েছে।response.json()দিয়ে JSON রেসপন্স প্রদান করা হয়েছে।
Step 2: API Call করা
এখন আপনি এই API কে HTTP POST রিকোয়েস্ট দিয়ে কল করতে পারবেন। উদাহরণস্বরূপ, আপনি Postman বা অন্য কোনো HTTP ক্লায়েন্ট ব্যবহার করে এই API কল করতে পারেন। POST রিকোয়েস্টের মাধ্যমে আপনি বইয়ের শিরোনাম, লেখক এবং প্রকাশের বছর পাঠাতে পারবেন।
API URL:
http://127.0.0.1:8000/your_app_name/api/add_book
POST রিকোয়েস্টের ডেটা:
{
"title": "The Great Gatsby",
"author": "F. Scott Fitzgerald",
"year": 1925
}
৪. PUT রিকোয়েস্টের মাধ্যমে ডেটা আপডেট করা
আপনি যদি একটি API তৈরি করতে চান যা ডেটা আপডেট করবে, তাহলে PUT রিকোয়েস্ট ব্যবহার করতে পারেন।
Step 1: PUT API Endpoint তৈরি করা
# controllers/api.py
def update_book():
# PUT রিকোয়েস্ট থেকে ইনপুট নেওয়া
book_id = request.vars.id
title = request.vars.title
author = request.vars.author
year = request.vars.year
# বইয়ের তথ্য আপডেট করা
db(db.book.id == book_id).update(title=title, author=author, year=year)
# JSON রেসপন্স প্রদান করা
return response.json(dict(status="success", message="Book updated successfully"))
Step 2: API Call করা
এখন আপনি এই API কে HTTP PUT রিকোয়েস্ট দিয়ে কল করতে পারবেন। URL হবে:
http://127.0.0.1:8000/your_app_name/api/update_book
PUT রিকোয়েস্টের ডেটা:
{
"id": 1,
"title": "The Great Gatsby Updated",
"author": "F. Scott Fitzgerald",
"year": 1926
}
৫. DELETE রিকোয়েস্টের মাধ্যমে ডেটা মুছে ফেলা
আপনি যদি একটি API তৈরি করতে চান যা ডেটা মুছে ফেলবে, তাহলে DELETE রিকোয়েস্ট ব্যবহার করতে পারেন।
Step 1: DELETE API Endpoint তৈরি করা
# controllers/api.py
def delete_book():
# DELETE রিকোয়েস্ট থেকে ইনপুট নেওয়া
book_id = request.vars.id
# বইয়ের রেকর্ড মুছে ফেলা
db(db.book.id == book_id).delete()
# JSON রেসপন্স প্রদান করা
return response.json(dict(status="success", message="Book deleted successfully"))
Step 2: API Call করা
এখন আপনি এই API কে HTTP DELETE রিকোয়েস্ট দিয়ে কল করতে পারবেন। URL হবে:
http://127.0.0.1:8000/your_app_name/api/delete_book
DELETE রিকোয়েস্টের ডেটা:
{
"id": 1
}
৬. API Authentication এবং Authorization
আপনি যদি API এর জন্য Authentication এবং Authorization ব্যবহার করতে চান, তাহলে Web2Py তে auth.requires_login() এবং auth.requires_permission() ফাংশন ব্যবহার করতে পারেন।
উদাহরণ:
# controllers/api.py
@auth.requires_login()
def get_books():
books = db().select(db.book.ALL)
return response.json(dict(books=[book.as_dict() for book in books]))
এখানে, API এ প্রবেশের আগে ইউজারকে লগইন করতে বাধ্য করা হয়েছে।
সারাংশ
Web2Py তে API Endpoint তৈরি করা খুবই সহজ এবং আপনি সহজেই RESTful API বা JSON-based API তৈরি করতে পারেন। API গুলি সাধারণত GET, POST, PUT, DELETE HTTP মেথড ব্যবহার করে এবং JSON ফরম্যাটে ডেটা রিটার্ন করে। Web2Py তে API তৈরি করার জন্য আপনাকে কন্ট্রোলার ফাইল ব্যবহার করতে হয় এবং response.json() ফাংশন ব্যবহার করে ডেটা রিটার্ন করতে হয়। এছাড়া, আপনি API এর জন্য Authentication এবং Authorization ব্যবহারের মাধ্যমে নিরাপত্তা নিশ্চিত করতে পারেন।